package org.dbstar.scheduler.job;

import java.util.Map;

import org.dbstar.scheduler.beans.Job;
import org.dbstar.scheduler.identifier.Identifier;


/**
 * 用于构建Job和Job执行器的工厂类。
 * 
 * @author 代波
 * @since 1.0.0
 * @version 1.0.0
 * @date 2012-3-29
 */
public interface SchedulerFactory {
	/**
	 * 获得系统标识，每次系统启动后会生成一个唯一的系统标识，并且在系统关闭前保持不变。
	 * 
	 * @return 系统标识
	 */
	public abstract String getSystemIdentifier();

	/**
	 * 根据Job定义来创建Job
	 * 
	 * @param jobConfIdentifier Job定义标识
	 * @param parameters Job参数
	 * @param submitter Job提交人
	 * @return 新创建的Job实例
	 * @throws IllegalFactoryException 若无法正确构建时抛出
	 */
	public abstract Job createJob(Identifier jobConfIdentifier, Map<String, String> parameters, String submitter)
			throws IllegalFactoryException;

	/**
	 * 根据Job来创建相应的Job执行器。
	 * 
	 * @param job Job
	 * @return 新创建的Job执行器
	 * @throws IllegalFactoryException 若无法正确构建时抛出
	 */
	public abstract JobRunner createJobRunner(Job job) throws IllegalFactoryException;
}
